/**
 * @Author       : Mo 2427995270@qq.com
 * @Date         : 2024-11-07 13:42:46
 * @LastEditTime : 2025-07-25 17:56:21
 * @FilePath     : \KT-02DP-BL\mobl\hal_driver\hal_delay.c
 * @Description  : 延时接口
 * @Version      : V1.0
 * @History      : 
 * @Note         : 
 */
/***************************************Includes***********************************/
#include "hal_delay.h"
#if USE_SYSTICK
#include "systick.h"
#endif

#if USE_OS == OS_FREERTOS
#include "FreeRTOS.h"
#include "task.h"
#endif

/************************************Private Macros********************************/
//#define


/**********************************Private Statement*******************************/

#if !USE_SYSTICK
    extern uint32_t SystemCoreClock;
    static void __delay_us(uint32_t us);
    static void __delay_ms(uint32_t ms);
#endif

/***********************************Public Variables*******************************/



/**********************************Private Variables*******************************/



/**********************************Public Functions********************************/

/**
 * @brief 延时微秒 无系统
 * @param  us               
 * @note null
 */
void delay_us_not_os(uint32_t us) {
#if USE_SYSTICK
    delay_us(us);
#else
    __delay_us(us);
#endif
}
/**
 * @brief 延时毫秒 无系统
 * @param  ms               
 * @note null
 */
void delay_ms_not_os(uint32_t ms) {
#if USE_SYSTICK
    delay_ms(ms);
#else
    __delay_ms(ms);
#endif
}
#if USE_OS != OS_NONE
/**
 * @brief 延时毫秒 有系统
 * @param  ms               
 * @note null
 */
void delay_ms_os(uint32_t ms) {
#if USE_OS == OS_FREERTOS
    vTaskDelay(pdMS_TO_TICKS(ms));
#elif USE_OS == OS_PTHREAD

#endif
}
#endif

/**********************************Private Functions*******************************/

#if !USE_SYSTICK
// 禁用优化
#pragma clang optimize off
static void __delay_us(uint32_t us) {
    uint32_t ticks = SystemCoreClock / 12000000 * us; // 一个循环大概12个指令周期
    while (ticks--) {
        ;
    }
}

static void __delay_ms(uint32_t ms) {
    while (ms--) {
        __delay_us(1000);
    }
}
#pragma clang optimize on
#endif

/* [] END OF FILE */
